package models.common.bean;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;

import common.constants.ConfConst;
import common.constants.Constants;
import common.enums.pactStatus;
import common.utils.NoUtil;
import common.utils.Security;

/**
 * 后台--风控--项目列表
 *@author liaijun
 *@version 2017年9月29日 下午8:09:10
 */
@Entity
public class BidOne
{
	/** 发布时间 */
	public Date time = new Date();
	@Id
	public long id;
	/** 标的编号:前缀（J）+id */
	@Transient
	public String bid_no;
	public String getBid_no(){
		return NoUtil.getBidNo(this.id);
	}
	
	/** 融通企业ID */
	public long user_id;
	
	/** 融通企业名称 */
	public String user_name;
	
	/** 所属融通产品ID */
	public long product_id;
	
	/** 融通标题（融通项目名称） */
	public String title;
	
	/** 融通金额（项目总金额） */
	public double amount;
	
	/** 手续费 */
	public double apramount;
	
	/** 商票金额 */
	public double paper_money;
	
	/** 融通描述 */
//	public String description;
	
	/**状态 */
	public int status;
	
	/** guapai登记标的入口：1 pc 2 app 3 wechat */
	public int client;
	
	/** 签署合同的状态0：未签署，1已签署*/
	public int pact_status;
	
	/** 发售时间 */
	public Date pre_release_time;
	
	/** 初审审核人 */
	public long preauditor_supervisor_id;
	
	/** 初审时间 */
	public Date preaudit_time;
	
	/** 审核意见 */
	public String preaudit_suggest;
	
	/** 复审审核人ID */
	public long auditor_supervisor_id;
	
	/** 复审时间 */
	public Date audit_time;
	
	/** 复审意见 */
	public String audit_suggest;
	
	/** 放款人ID */
	public long release_supervisor_id;
	
	/** 放款时间 */
	public Date release_time;
	
	/** 到期时间 */
	public Date end_time;
	
	/**商票额度id**/
	public long consult_id;
	
	/** 定向制定的投资者**/
	public long hang_orientation;
	
	/** 商票正面图片 */
	public String hang_evidence_url;
	
	@Transient
	public String sign;
	public String getSign () {
		
		return Security.addSign(this.id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}
	
	/** 业务订单号：标的登记操作唯一标识 */
	public String service_order_no;
	
	/** 托管方返回的交易订单号 */
	public String trust_order_no;
    
	/**
	 * 奖励发放状态 0 未发放 1 cps已发放 2 财富圈已发放
	 */
	public int reward_grant_type ;
	
	/**
	 * 挂牌的类型  0默认是非定向投资1：定向投资
	 */
	public int bid_type ;
	
	/**
	 * 逾期天数
	 */
	public int out_time_day;
 
	/**
	 * 是否是黑名单
	 */
	public int is_black;
	public Status getStatus() {
		Status status = Status.getEnum(this.status);
		
		return status;
	}
	
	public void setStatus(Status status) {
		this.status = status.code;
	}
	public pactStatus getPactStus(){
		return pactStatus.getEnum(pact_status);
	}
	
	public enum RewardGrantType {
		
		NOT_REWARD(0,"奖励未发放"),
		CPS_REWARD(1,"cps奖励已发放"),
		WEALTHCIRCLE_REWARD(2,"财富圈奖励发放") ;
		
		/** 状态 */
		public int code;
		
		/** 描述 */
		public String value;
		
		private RewardGrantType(int code, String value){
			this.code = code;
			this.value = value;
		}
		
		public static RewardGrantType getEnum(int code){
			RewardGrantType[] rewardGrantType = RewardGrantType.values();
			for(RewardGrantType income:rewardGrantType){
				if(income.code == code){
					
					return income;
				}
			}
			
			return null;
		}
		
	}
	
	/**
	 * 标的状态
	 *
	 * @description 
	 *
	 * @author yaoyi
	 * @createDate 2015年12月26日
	 */
	public enum Status {
		 
		/** 初审中 */
		PREAUDITING(0, "初审中"),
		
		/** 融通中(初审通过) */
		FUNDRAISING(1, "融通中"),
		
		/**待支付*/
		UNPAID(11,"待支付"),
		
		/**待提交*/
		SUBMIT(22,"待提交"),
		/**待签收*/
		CONFIRM_SUBMISSION(3, "待签收"),
		/**取消*/
		CONFIRM_SUBMISSION_NO(77, "已取消"),
		
		/** 复审，满标审核(已满标) */
		AUDITING(2, "复审"), 
		
		/** 待放款(复审通过) */
	 	WAIT_RELEASING(4, "待放款"),	
	 	/**交易审核中*/
	 	SUCCESSFUL_TRADE_APP(5,"交易审核中"),
	 	/**交易成功*/
		SUCCESSFUL_TRADE(28,"交易成功"),
	 
		
		/** 初审不通过 */
		PREAUDIT_NOT_THROUGH(-1, "初审不通过"),	
		/**复审不通过 */
		AUDITING_NO(-2, "复审不通过"), 
		/**没有签合同**/
		NO_PACT(99, "合同未签署"),
		
		/**支付失败*/
		PAY_FAILED(19,"支付失败"),
		
		/**交易取消*/
		TRADE_REVERSALS(29,"交易取消");
		
		
		/** 状态 */
		public int code;
		
		/** 描述 */
		public String value;
		
		 
		
		/** 前台-投资页面，显示的正在进行中的标的(融通中、复审待审、待放款、还款中)*/
		public static final List<Integer> PROCESS = Arrays.asList(
				FUNDRAISING.code, AUDITING.code, WAIT_RELEASING.code, CONFIRM_SUBMISSION.code,UNPAID.code,SUBMIT.code);
		
		/** 失败的 （初审不通过，复审不通过，交易取消） */
		public static final List<Integer> FAIL = Arrays.asList(PREAUDIT_NOT_THROUGH.code, AUDITING_NO.code,TRADE_REVERSALS.code,CONFIRM_SUBMISSION_NO.code);
	
		
		public static final List<Status> STR_STATUS = Arrays.asList(PREAUDITING,FUNDRAISING,AUDITING,WAIT_RELEASING,CONFIRM_SUBMISSION,UNPAID,PREAUDIT_NOT_THROUGH,SUBMIT,NO_PACT);
		private Status(int code, String value){
			this.code = code;
			this.value = value;
		}
		
		public static Status getEnum(int code){
			Status[] bidstatus = Status.values();
			for(Status income:bidstatus){
				if(income.code == code){
					
					return income;
				}
			}
			
			return null;
		}
		public static Status getStatusValue(String statu){
			for(Status sta : STR_STATUS){
				if(statu.equals(sta.toString())){
					return sta;
				}
			}
				
			return null;
		}
	}
}
